package com.gosophia.metadataEngine.service;


import java.util.List;

import com.gosophia.commons.OrderCondition;
import com.gosophia.commons.Page;
import com.gosophia.commons.exception.BusinessException;
import com.gosophia.metadataEngine.entity.DataSourceInfo;

/**
 * 数据源信息api
 * @author mayue
 *
 */
public interface DataSourceInfoService {
    /**
     * 添加数据源信息:
     * dataSourceInfo不能为null,name不能为null,driverClass不能为null,dialect不能为null,
     * password不能为null,userName不能为null,url不能为null
     * name不能重复
     * @param dataSourceInfo
     * @throws BusinessException JC2_YSJ_B_1:名称不能重复
     * 
     */
    public void addDataSourceInfo(DataSourceInfo dataSourceInfo) throws BusinessException;
      /**
       * 删除数据源信息:
       * @param id
       * @param version
       * @return  被删除的数据源
       * @throws BusinessException:有元数据表引用时  JC2_YSJ_B_2:该数据源被引用，不能删除
       * @throws ConcurrencyException  JC2_YSJ_C_1:该数据源已被删除、JC2_YSJ_C_2:该数据源已被修改
       */
    public DataSourceInfo removeDataSourceInfo(Long id,Long version) throws BusinessException;
    /**
     * 修改数据源信息
     * dataSourceInfo不能为null,name不能为null,driverClass不能为null,dialect不能为null,
     * password不能为null,userName不能为null,url不能为null
     * name不能重复
     * @throws BusinessException  JC2_YSJ_B_3：名称不能重复
     * @throws ConcurrencyException  JC2_YSJ_C_3：该数据源已被删除、JC2_YSJ_C_4：该数据源已被修改
     */
    public void updateDataSourceInfo(DataSourceInfo dataSourceInfo) throws BusinessException;
    /**
     * 分页查询所有数据源信息
     * @param page不能为null page.pageSize>0,page.pageNo>0
     * @param searchString 
     * @param orderConditions 排序条件
     * @return Page<DataSourceInfo>
     */
    public Page<DataSourceInfo> findAllDataSourceInfoByPage(Page<DataSourceInfo> page, String searchString, List<OrderCondition> orderConditions);
    /** 
     * 通过数据源id查找指定数据源：dataSourceInfoId不能为null
     * @param dataSourceInfoId
     * @return DataSourceInfo
     */
    public DataSourceInfo findDataSourceInfoById(Long dataSourceInfoId);
    /**
     * 检查填写的数据源是否正确
     * @param dataSourceInfoDto
     * @return 成功返回true 失败返回false;
     */
	public boolean checkDataSourceInfo(DataSourceInfo dataSourceInfo);
    
}
